﻿namespace EnergyGeneratorSimVisualizer.ViewModels
{
    using EnergyGeneratorSim.Parameters;

    public class GeneralParametersViewModel : ViewModelBase
    {
        private readonly GeneralParameters parameters;

        public GeneralParametersViewModel(GeneralParameters param)
        {
            this.parameters = param;
        }

        /// <summary>
        /// Gets or sets the rho.
        /// Ohm*m}    {Spez. elektr. Widerstand von Kupfer, je nach Temperatur, Kohlrausch,T193
        /// </summary>
        /// <value>The rho.</value>
        public double rho
        {
            get
            {
                return this.parameters.rho;
            }

            set
            {
                this.parameters.rho = value;
                this.NotifyPropertyChanged(x => rho);
            }
        }

        /// <summary>
        /// Gets or sets the rho mag.
        /// kg/m^3}  {Dichte des Magnet-Materials, Eisen, Kohlrausch Bd.3
        /// </summary>
        /// <value>The rho mag.</value>
        public double rhoMag
        {
            get
            {
                return this.parameters.rhoMag;
            }

            set
            {
                this.parameters.rhoMag = value;
                this.NotifyPropertyChanged(x => x.rhoMag);
            }
        }

        /// <summary>
        /// Gets or sets the CT.
        /// 150E-6;} {Farad}    {Kapazität des Kondensators, der mit in der Turbo-Spule (!) in Reihe geschaltet
        /// </summary>
        /// <value>The CT.</value>
        public double CT
        {
            get
            {
                return this.parameters.CT;
            }

            set
            {
                this.parameters.CT = value;
                this.NotifyPropertyChanged(x => x.CT);
            }
        }

        /// <summary>
        /// Gets or sets the CI.
        /// Farad}   {Kapazität des Kondensators, der mit in der Input-Spule (!) in Reihe geschaltet
        /// </summary>
        /// <value>The CI.</value>
        public double CI
        {
            get
            {
                return this.parameters.CI;
            }

            set
            {
                this.parameters.CI = value;
                this.NotifyPropertyChanged(x => x.CI);
            }
        }

        /// <summary>
        /// Gets or sets the rlast.
        /// Ohm}   {Ohm'scher Lastwiderstand im LC-Turbo-Schwingkreis
        /// </summary>
        /// <value>The rlast.</value>
        public double Rlast
        {
            get
            {
                return this.parameters.Rlast;
            }

            set
            {
                this.parameters.Rlast = value;
                this.NotifyPropertyChanged(x => x.Rlast);
            }
        }

        /// <summary>
        /// Gets or sets the um an.
        /// U/min} {Anfangsbedingung mechanisch - Rotierender Magnet: Startdrehzahl
        /// </summary>
        /// <value>The um an.</value>
        public double UmAn
        {
            get
            {
                return this.parameters.UmAn;
            }

            set
            {
                this.parameters.UmAn = value;
                this.NotifyPropertyChanged(x => x.UmAn);
            }
        }

        /// <summary>
        /// Gets or sets the uc.
        /// Volt
        /// </summary>
        /// <value>The uc.</value>
        public double Uc
        {
            get
            {
                return this.parameters.Uc;
            }

            set
            {
                this.parameters.Uc = value;
                this.NotifyPropertyChanged(x => x.Uc);
            }
        }

        /// <summary>
        /// Gets or sets the il.
        /// Ampere} {Anfangsbedingung elektrisch - Kondensatorspannung = 0, Kein Spulenstrom
        /// </summary>
        /// <value>The il.</value>
        public double Il
        {
            get
            {
                return this.parameters.Il;
            }

            set
            {
                this.parameters.Il = value;
                this.NotifyPropertyChanged(x => x.Il);
            }
        }

        /// <summary>
        /// Gets or sets the cr anfang.
        /// Koeffizient einer geschwindigkeits-proportionalen Reibung zwecks mechanischer Leistungs-Entnahme
        /// </summary>
        /// <value>The cr anfang.</value>
        public double crAnfang
        {
            get
            {
                return this.parameters.crAnfang;
            }

            set
            {
                this.parameters.crAnfang = value;
                this.NotifyPropertyChanged(x => x.crAnfang);
            }
        }

        /// <summary>
        /// Gets or sets the phip ziel.
        /// Ziel-Drehzahl, an der die Reibungs-Nachregelung ausgerichtet wird.
        /// </summary>
        /// <value>The phip ziel.</value>
        public double phipZiel
        {
            get
            {
                return this.parameters.phipZiel;
            }

            set
            {
                this.parameters.phipZiel = value;
                this.NotifyPropertyChanged(x => x.phipZiel);
            }
        }

    }
}
